package listbyorder.access001_100.test49;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

/**
 * @author code_yc
 * @version 1.0
 * @date 2020/6/1 10:13
 */
public class Solution2 {

    // 方法二： 将strs中的元素均按照字符元素的顺序进行排序
    // 1 首先创建一个哈希标
    // 2 哈希表键对应的是字符串排序后的结果，值对应的是当前key打乱之后的结果
    // 3 每次遍历一个字符串，都检查当前的字符串整理之后的字符串在map中是否存在，如果存在，则将当前的字符串加入此key对应的列表中去
    // 4 如果当前的map中不存在当前的字符串，则将当前的字符串与key的组合扔进map中
    // 5 最后返回map中value的组合即可
    public List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String, List<String>> map = new HashMap<>();
        for (int i = 0; i < strs.length; i++) {
            char[] chars = strs[i].toCharArray();
            Arrays.sort(chars);
            String key = String.valueOf(chars);
            if (map.containsKey(key)) {
                map.get(key).add(strs[i]);
            } else {
                List<String> temp = new ArrayList<>();
                temp.add(strs[i]);
                map.put(key, temp);
            }
        }
        return new ArrayList<>(map.values());
    }
}
